import requests
import time
from read_config import read_config


class AuthManager:
    def __init__(self, env="test"):
        """
        env: dev/test，对应 config.ini 的 [dev]/[test]  section
        """
        self.env = env
        self.base_url = read_config(self.env, "base_url")
        self.username = read_config(self.env, "login_username")
        self.password = read_config(self.env, "login_password")

        # Token 缓存（避免重复登录）
        self.token = None
        self.token_expire = 0  # 过期时间戳（秒）

    def _login(self):
        """私有方法：调用登录接口获取 Token"""
        login_url = f"{self.base_url}/prod-api/login"  # 假设登录路径固定
        payload = {
            "username": self.username,
            "password": self.password
        }
        response = requests.post(login_url, json=payload)
        result = response.json()

        # 断言登录成功（提前拦截失败场景）
        assert result.get("code") == 200, f"登录失败：{result.get('msg')}"

        # 缓存 Token 和过期时间（假设接口返回 expire 字段）
        self.token = result["data"]["token"]
        self.token_expire = time.time() + result["data"].get("expire", 3600)  # 有效期默认 1h
        return self.token

    def get_token(self):
        """公共方法：获取有效 Token（自动刷新）"""
        # Token 不存在或已过期（提前 30 秒刷新）
        if not self.token or time.time() + 30 > self.token_expire:
            self._login()
        return self.token

    def get_auth_headers(self):
        """生成带 Token 的请求头"""
        token = self.get_token()
        return {
            "Authorization": f"Bearer {token}",
            "Content-Type": "application/json"
        }